Software is used to produce complex documents in many different use cases, such as using a source generator whose output is source code in some target language. Other examples include software that produces Portable Document Format (PDF) files, software that generates structured content such as Hypertext Markup Language (HTML) or Extensible Markup Language (XML), utilities that produce reports from various inputs, and utilities that convert from one file format to another. Some graphics-oriented examples include software that produces complex visualizations such as heat maps, or software that algorithmically generates music in standard notation. The generated documents may include text, symbols, and/or graphic elements.
These generators are often complex and include many thousands of lines of code, and thus may be difficult to develop, debug, and maintain. Developers working on such applications may require lengthy training and familiarization, resulting in low productivity, even while relying on more experienced developers and test automation. For commercial applications, this may create a very small pool of talent that must be nurtured and about whom retention may be a constant concern. For open source applications, this creates a serious impediment to the application's ability to attract developer interest and generate momentum.